#
#conference,什么时候用类方法，什么时候用抽象方法

# 继承，保留父类的所有方法，同时还可以拥有子类自己的方法和属性，还是拿之前人的那个类举例
class EarthPerson:
    def __init__(self, name):
        self.name = name
        print("我是父类的构造函数init，我只拥有名字一个属性")

    def breathing(self):
        print("%s会呼吸" % self.name)

    def eat(self):
        print("%s实现了吃饭的功能" % self.name)

    def speak(self):
        print("%s实现了说话的功能" % self.name)


# 现在要创建两个类，分别是中国人和美国人，二者有什么异同，EarthPerson是否可以复用的地方?
# 子类可以继承父类的全部方法和属性
class Chinese(EarthPerson):
    def __init__(self, name, age):
        # 继承父类的init方法后，需要增加一个肤色的属性
        super(Chinese, self).__init__(name)
        self.age = age
    # pass
    def speak(self):
        print("%s说中文" % self.name)

    def eat(self):
        print("%s吃烤鸭" % self.name)

    def show_age(self):
        print("%s的年龄是%s" % (self.name, self.age))


# liangchen是中国人，需要用中国人的方式，父类的方法breathing可以拿来用（中国人和美国人都要呼吸），speak和eat可以重新修改成子类的方法,中美方式有差别
# liangchen = Chinese("梁晨","30")
# liangchen.breathing()
# liangchen.eat()
# liangchen.speak()
# liangchen.show_age()



# 乔丹是美国人，需要美中国人的方式，父类的方法breathing可以拿来用（中国人和美国人都要呼吸），speak和eat可以重新修改成子类的方法,中美方式有差别，除了需要父类的构造函数name接受名字外，还需要接受肤色
class American(EarthPerson):
    # pass
    def __init__(self, name, skin_color):
        # 继承父类的init方法后，需要增加一个肤色的属性
        super(American, self).__init__(name)
        self.skin_color = skin_color

    def speak(self):
        print("%s说英文" % self.name)

    def eat(self):
        print("%s吃披萨饼" % self.name)

    def show_color(self):
        print("%s的皮肤颜色是%s" % (self.name, self.skin_color))

#
qiaodan = American("jordan", "black")
qiaodan.breathing()
qiaodan.eat()
qiaodan.speak()
qiaodan.show_color()
